# -*- coding: utf-8 -*-
# @Time        :2024/11/5 下午7:27
# @Author      :文刀水寿
# @File        : 服务端开发.py
"""
 @Description :演示Socket服务端开发
"""
import socket

# 创建socket对象
socket_server = socket.socket()
# 绑定ip地址和端口
socket_server.bind(("localhost", 8888))
# 监听端口
socket_server.listen(1)
# listen 方法内返回的是一个二元元组（链接对象，客户端和服务端的链接对象）
# 等待客户端链接
# result： tuple = socket_server.accept()
# conn = result[0]  客户端和服务端的链接对象
# address = result[1] 客户端的地址信息
coon, address = socket_server.accept()
# accept()方法，是阻塞方法，等待客户端的链接如果没有链接，就卡在这一行不向下执行了

print(f"接受到了客户端的链接，客户端的信息是：{address}")
while True:
    # 接受客户端信息，要使用客户端和服务端的本次链接对象，而非socket_server对象
    data: str = coon.recv(1024).decode("UTF-8")
    # recv接受的参数使缓冲区大小，一般给1024即可
    # recv方法的返回值使一个字节数组也就是bytes对象，不是字符串， 可以通过decode方法通过UTF-8编码，将字节数组编码为字符串对象
    print(f"客户端发来的信息是：{data}")
    if data == 'exit':
        print("下线")
        break
    # 发送回复消息
    coon.send(input("请输入你要返回的消息：").encode("UTF-8"))  # encode可以将字符串编码为字节数组对象

# 关闭链接
coon.close()
socket_server.close()
